// 导航守卫
import router from '@/router'
import store from '@/store'

router.beforeEach(async(to, from, next) => {
  // 方式一:
  // 已登录 是否右token
  // if (store.getters.token) {
  //   // 判断是否是登录页
  //   if (to.path === '/login') {
  //     // next 如果传入url可以跳转页面
  //     next('/')
  //   } else {
  //     next()
  //   }
  // } else {
  //   // 未登录
  //   // 判断是否在白名单
  //   const whitelist = ['/login', '/404', '/test']
  //   if (whitelist.indexOf(to.path) !== -1) {
  //     // 在白名单
  //     next()
  //   } else {
  //     next('/login')
  //   }
  // }

  // 方式二
  const token = store.getters.token
  const url = to.path
  const whitelist = ['/login', '/404', '/test']
  // 已登录, 是登录页, 跳转首页
  if (token && url === '/login') {
    next('/')
  }
  // 已登录, 不是登录页, 放行
  if (token && url !== '/login') {
    // 登录后, 正常页面进入之前, 确保用户获取用户数据
    if (Object.keys(store.state.user.profile).length === 0) {
      // 不用每次跳转都拿, 如果已经有过数据不用拿了
      // {} 永远为true, 需要判断里面爱你的属性值
      // Object.keys(obj) 可以获的属性值变成数组
      await store.dispatch('user/getProfile')
      // menus
      const menus = store.state.user.profile.roles.menus
      console.log(4444, menus)
      // 调用过滤动态路由函数
      const res = await store.dispatch('permission/filterRoutes', menus)
      console.log('导航守卫接收的路由', res)
      // 追加路由配置 router.addRoutes()---恢复路由无法访问问题
      router.addRoutes([
        ...res,
        // 1.解决刷新页面出现404的问题----接着会出现刷新出现空白的问题
        { path: '*', redirect: '/404', hidden: true }
      ])
      // console.log(555555, to.path)
      // to.path   当前页面路由的名称
      // 2. 解决刷新出现空白的问题
      return next(to.path)
    }
    next()
  }
  // 未登录, 不在白名单 , 跳转登录页
  if (!token && !whitelist.includes(url)) {
    next('/login')
  }
  // 未登录, 在白名单, 放行
  if (!token && whitelist.includes(url)) {
    next()
  }
})

